#include <unistd.h>
unsigned int code_len, code2_len, data_len, bss_len, init_len, gsfinal, common_addr,
- initial;
+ initial, discard_base, discard_len;
+
+static int is_discard(int addr)
+{
+ if (addr < discard_base || addr >= discard_base + discard_len)
+ return 0;
+ return 1;
+}
int main(int argc, char *argv[])
{
sscanf(p1, "%x", &bss_len);
if (strcmp(p2, "l__INITIALIZED") == 0)
sscanf(p1, "%x", &init_len);
+ if (strcmp(p2, "l__DISCARD") == 0)
+ sscanf(p1, "%x", &discard_len);
if (strcmp(p2, "s__GSFINAL") == 0)
sscanf(p1, "%x", &gsfinal);
if (strcmp(p2, "s__INITIALIZER") == 0)
sscanf(p1, "%x", &initial);
if (strcmp(p2, "s__COMMONMEM") == 0)
sscanf(p1, "%x", &common_addr);
+ if (strcmp(p2, "s__DISCARD") == 0)
+ sscanf(p1, "%x", &discard_base);
if (hogs && match == 0) {
if (strstr(p2, "_start")) {
sscanf(p1, "%x", &naddr);
strcpy(nname, p2);
- if (addr) {
+ if (addr && !is_discard(addr)) {
name[strlen(name)-6]=0;
printf("%d: %s\n", naddr-addr, name);
}