+
+ if (print_relocs) {
+ uint32_t *relocs = xcalloc(reloc_count, sizeof(uint32_t));
+ uint32_t i;
+ unsigned long r;
+
+ printf(" Relocs:\n");
+ printf(" #\treloc ( address )\tdata\n");
+
+ if (old_flags & FLAT_FLAG_GZIP)
+ reopen_stream_compressed(&ifp);
+ if (fseek_stream(&ifp, reloc_start, SEEK_SET)) {
+ fprintf(stderr, "Cannot seek to relocs of %s\n", ifile);
+ fclose_stream(&ifp);
+ return;
+ }
+ if (fread_stream(relocs, sizeof(uint32_t), reloc_count, &ifp) == -1) {
+ fprintf(stderr, "Cannot read relocs of %s\n", ifile);
+ fclose_stream(&ifp);
+ return;
+ }
+
+ for (i = 0; i < reloc_count; ++i) {
+ uint32_t raddr, addr;
+ r = ntohl(relocs[i]);
+ raddr = flat_get_relocate_addr(r);
+ printf(" %u\t0x%08lx (0x%08"PRIx32")\t", i, r, raddr);
+ fseek_stream(&ifp, sizeof(old_hdr) + raddr, SEEK_SET);
+ fread_stream(&addr, sizeof(addr), 1, &ifp);
+ printf("%"PRIx32"\n", addr);
+ }
+
+ /* reset file position for below */
+ fseek_stream(&ifp, sizeof(old_hdr), SEEK_SET);
+ }