| /* libunwind - a platform-independent unwind library |
| Copyright (C) 2003 Hewlett-Packard Co |
| Contributed by David Mosberger-Tang <davidm@hpl.hp.com> |
| |
| This file is part of libunwind. |
| |
| Copyright (c) 2003 Hewlett-Packard Co. |
| |
| Permission is hereby granted, free of charge, to any person obtaining |
| a copy of this software and associated documentation files (the |
| "Software"), to deal in the Software without restriction, including |
| without limitation the rights to use, copy, modify, merge, publish, |
| distribute, sublicense, and/or sell copies of the Software, and to |
| permit persons to whom the Software is furnished to do so, subject to |
| the following conditions: |
| |
| The above copyright notice and this permission notice shall be |
| included in all copies or substantial portions of the Software. |
| |
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
| EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
| NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE |
| LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION |
| OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION |
| WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ |
| |
| #include <stdio.h> |
| #include <string.h> |
| |
| #define UNW_LOCAL_ONLY /* must define this for consistency with backtrace() */ |
| #include <libunwind.h> |
| |
| int verbose; |
| |
| int |
| f257 (void) |
| { |
| void *buffer[300]; |
| int i, n; |
| |
| if (verbose) |
| printf ("First backtrace:\n"); |
| n = unw_backtrace (buffer, 300); |
| if (verbose) |
| for (i = 0; i < n; ++i) |
| printf ("[%d] ip=%p\n", i, buffer[i]); |
| |
| unw_flush_cache (unw_local_addr_space, 0, 0); |
| |
| if (verbose) |
| printf ("\nSecond backtrace:\n"); |
| n = unw_backtrace (buffer, 300); |
| if (verbose) |
| for (i = 0; i < n; ++i) |
| printf ("[%d] ip=%p\n", i, buffer[i]); |
| return 0; |
| } |
| |
| #define F(n,m) \ |
| int \ |
| f##n (void) \ |
| { \ |
| return f##m (); \ |
| } |
| |
| /* Here, we rely on the fact that the script-cache's hash-table is 256 |
| entries big. With 257 functions, we're guaranteed to get at least |
| one hash-collision. */ |
| F(256,257) F(255,256) F(254,255) F(253,254) |
| F(252,253) F(251,252) F(250,251) F(249,250) |
| F(248,249) F(247,248) F(246,247) F(245,246) |
| F(244,245) F(243,244) F(242,243) F(241,242) |
| F(240,241) F(239,240) F(238,239) F(237,238) |
| F(236,237) F(235,236) F(234,235) F(233,234) |
| F(232,233) F(231,232) F(230,231) F(229,230) |
| F(228,229) F(227,228) F(226,227) F(225,226) |
| F(224,225) F(223,224) F(222,223) F(221,222) |
| F(220,221) F(219,220) F(218,219) F(217,218) |
| F(216,217) F(215,216) F(214,215) F(213,214) |
| F(212,213) F(211,212) F(210,211) F(209,210) |
| F(208,209) F(207,208) F(206,207) F(205,206) |
| F(204,205) F(203,204) F(202,203) F(201,202) |
| F(200,201) F(199,200) F(198,199) F(197,198) |
| F(196,197) F(195,196) F(194,195) F(193,194) |
| F(192,193) F(191,192) F(190,191) F(189,190) |
| F(188,189) F(187,188) F(186,187) F(185,186) |
| F(184,185) F(183,184) F(182,183) F(181,182) |
| F(180,181) F(179,180) F(178,179) F(177,178) |
| F(176,177) F(175,176) F(174,175) F(173,174) |
| F(172,173) F(171,172) F(170,171) F(169,170) |
| F(168,169) F(167,168) F(166,167) F(165,166) |
| F(164,165) F(163,164) F(162,163) F(161,162) |
| F(160,161) F(159,160) F(158,159) F(157,158) |
| F(156,157) F(155,156) F(154,155) F(153,154) |
| F(152,153) F(151,152) F(150,151) F(149,150) |
| F(148,149) F(147,148) F(146,147) F(145,146) |
| F(144,145) F(143,144) F(142,143) F(141,142) |
| F(140,141) F(139,140) F(138,139) F(137,138) |
| F(136,137) F(135,136) F(134,135) F(133,134) |
| F(132,133) F(131,132) F(130,131) F(129,130) |
| F(128,129) F(127,128) F(126,127) F(125,126) |
| F(124,125) F(123,124) F(122,123) F(121,122) |
| F(120,121) F(119,120) F(118,119) F(117,118) |
| F(116,117) F(115,116) F(114,115) F(113,114) |
| F(112,113) F(111,112) F(110,111) F(109,110) |
| F(108,109) F(107,108) F(106,107) F(105,106) |
| F(104,105) F(103,104) F(102,103) F(101,102) |
| F(100,101) F(99,100) F(98,99) F(97,98) |
| F(96,97) F(95,96) F(94,95) F(93,94) |
| F(92,93) F(91,92) F(90,91) F(89,90) |
| F(88,89) F(87,88) F(86,87) F(85,86) |
| F(84,85) F(83,84) F(82,83) F(81,82) |
| F(80,81) F(79,80) F(78,79) F(77,78) |
| F(76,77) F(75,76) F(74,75) F(73,74) |
| F(72,73) F(71,72) F(70,71) F(69,70) |
| F(68,69) F(67,68) F(66,67) F(65,66) |
| F(64,65) F(63,64) F(62,63) F(61,62) |
| F(60,61) F(59,60) F(58,59) F(57,58) |
| F(56,57) F(55,56) F(54,55) F(53,54) |
| F(52,53) F(51,52) F(50,51) F(49,50) |
| F(48,49) F(47,48) F(46,47) F(45,46) |
| F(44,45) F(43,44) F(42,43) F(41,42) |
| F(40,41) F(39,40) F(38,39) F(37,38) |
| F(36,37) F(35,36) F(34,35) F(33,34) |
| F(32,33) F(31,32) F(30,31) F(29,30) |
| F(28,29) F(27,28) F(26,27) F(25,26) |
| F(24,25) F(23,24) F(22,23) F(21,22) |
| F(20,21) F(19,20) F(18,19) F(17,18) |
| F(16,17) F(15,16) F(14,15) F(13,14) |
| F(12,13) F(11,12) F(10,11) F(9,10) |
| F(8,9) F(7,8) F(6,7) F(5,6) |
| F(4,5) F(3,4) F(2,3) F(1,2) |
| |
| int |
| main (int argc, char **argv) |
| { |
| if (argc > 1 && strcmp (argv[1], "-v") == 0) |
| verbose = 1; |
| |
| return f1 (); |
| } |