#!/usr/bin/perl # Copyright © 2009 IBM Corporation # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version # 2 of the License, or (at your option) any later version. # This script checks the relcoations of a vmlinux for "suspicious" # relocations. use strict; use warnings; if ($#ARGV != 1) { die "$0 [path to objdump] [path to vmlinux]\n"; } # Have Kbuild supply the path to objdump so we handle cross compilation. my $objdump = shift; my $vmlinux = shift; my $bad_relocs_count = 0; my $bad_relocs = ""; my $old_binutils = 0; open(FD, "$objdump -R $vmlinux|") or die; while () { study $_; # Only look at relcoation lines. next if (!/\s+R_/); # These relocations are okay next if (/R_PPC64_RELATIVE/ or /R_PPC64_NONE/ or /R_PPC64_ADDR64\s+mach_/); # If we see this type of relcoation it's an idication that # we /may/ be using an old version of binutils. if (/R_PPC64_UADDR64/) { $old_binutils++; } $bad_relocs_count++; $bad_relocs .= $_; } if ($bad_relocs_count) { print "WARNING: $bad_relocs_count bad relocations\n"; print $bad_relocs; } if ($old_binutils) { print "WARNING: You need at binutils >= 2.19 to build a ". "CONFIG_RELCOATABLE kernel\n"; }