1#!/usr/bin/perl 2 3# Copyright © 2009 IBM Corporation 4 5# This program is free software; you can redistribute it and/or 6# modify it under the terms of the GNU General Public License 7# as published by the Free Software Foundation; either version 8# 2 of the License, or (at your option) any later version. 9 10# This script checks the relcoations of a vmlinux for "suspicious" 11# relocations. 12 13use strict; 14use warnings; 15 16if ($#ARGV != 1) { 17 die "$0 [path to objdump] [path to vmlinux]\n"; 18} 19 20# Have Kbuild supply the path to objdump so we handle cross compilation. 21my $objdump = shift; 22my $vmlinux = shift; 23my $bad_relocs_count = 0; 24my $bad_relocs = ""; 25my $old_binutils = 0; 26 27open(FD, "$objdump -R $vmlinux|") or die; 28while (<FD>) { 29 study $_; 30 31 # Only look at relcoation lines. 32 next if (!/\s+R_/); 33 34 # These relocations are okay 35 next if (/R_PPC64_RELATIVE/ or /R_PPC64_NONE/ or 36 /R_PPC64_ADDR64\s+mach_/); 37 38 # If we see this type of relcoation it's an idication that 39 # we /may/ be using an old version of binutils. 40 if (/R_PPC64_UADDR64/) { 41 $old_binutils++; 42 } 43 44 $bad_relocs_count++; 45 $bad_relocs .= $_; 46} 47 48if ($bad_relocs_count) { 49 print "WARNING: $bad_relocs_count bad relocations\n"; 50 print $bad_relocs; 51} 52 53if ($old_binutils) { 54 print "WARNING: You need at binutils >= 2.19 to build a ". 55 "CONFIG_RELCOATABLE kernel\n"; 56} 57