Objcopy and alignment

Dave Korn dk@artimi.com
Tue May 18 15:12:00 GMT 2004


> -----Original Message-----
> From: binutils-owner  On Behalf Of Dave Murphy
> Sent: 18 May 2004 15:40

> Is it possible to specify the alignment of binary data when 
> using objcopy to
> generate object  files from raw data? Failing that, can 
> obcopy be told to
> pad the length to, say, an even multiple of 4 bytes?


  Since you're using a whole load of shell scripting already, why not just
add a little bit more: you can pad a file $FILE to length four by processing
it like this:

echo -n $(( `cat ${FILE} | wc -c` & 3 )) | sed -e 's/0//g' | sed -e
's/1/XXX/g' | sed -e 's/2/XX/g' | sed -e 's/3/X/g' >> ${FILE}

  I'm not second-nature enough with sed script syntax to know if all those
substitutions can be put into a single sed invocation, but that would be an
obvious optimisation if you can.  Here's an example, run against a bunch of
text files I generated from identical starting copies:

dk@mace /repository> cp size0.txt size1.txt
dk@mace /repository> cp size0.txt size2.txt
dk@mace /repository> cp size0.txt size3.txt
dk@mace /repository> cp size0.txt size4.txt
dk@mace /repository> cp size0.txt size5.txt
dk@mace /repository> echo -n a >>size1.txt
dk@mace /repository> echo -n ab >>size2.txt
dk@mace /repository> echo -n abc >>size3.txt
dk@mace /repository> echo -n abcd >>size4.txt
dk@mace /repository> echo -n abcde >>size5.txt
dk@mace /repository> ls -la size?.txt
-rw-r--r--    1 dk       Domain U      124 May 18 15:59 size0.txt
-rw-r--r--    1 dk       Domain U      125 May 18 16:06 size1.txt
-rw-r--r--    1 dk       Domain U      126 May 18 16:06 size2.txt
-rw-r--r--    1 dk       Domain U      127 May 18 16:06 size3.txt
-rw-r--r--    1 dk       Domain U      128 May 18 16:06 size4.txt
-rw-r--r--    1 dk       Domain U      129 May 18 16:07 size5.txt
dk@mace /repository> echo $(( `cat size0.txt | wc -c` & 3 )) | sed -e
's/0//g' | sed -e 's/1/XXX/g' | sed -e 's/2/XX/g' | sed -e 's/3/X/g'

dk@mace /repository> echo $(( `cat size1.txt | wc -c` & 3 )) | sed -e
's/0//g' | sed -e 's/1/XXX/g' | sed -e 's/2/XX/g' | sed -e 's/3/X/g'
XXX
dk@mace /repository> echo $(( `cat size2.txt | wc -c` & 3 )) | sed -e
's/0//g' | sed -e 's/1/XXX/g' | sed -e 's/2/XX/g' | sed -e 's/3/X/g'
XX
dk@mace /repository> echo $(( `cat size3.txt | wc -c` & 3 )) | sed -e
's/0//g' | sed -e 's/1/XXX/g' | sed -e 's/2/XX/g' | sed -e 's/3/X/g'
X
dk@mace /repository> echo $(( `cat size4.txt | wc -c` & 3 )) | sed -e
's/0//g' | sed -e 's/1/XXX/g' | sed -e 's/2/XX/g' | sed -e 's/3/X/g'

dk@mace /repository> echo $(( `cat size5.txt | wc -c` & 3 )) | sed -e
's/0//g' | sed -e 's/1/XXX/g' | sed -e 's/2/XX/g' | sed -e 's/3/X/g'
XXX
dk@mace /repository> # now try actually doing the append!
dk@mace /repository> echo -n $(( `cat size0.txt | wc -c` & 3 )) | sed
-e 's/0//g' | sed -e 's/1/XXX/g' | sed -e 's/2/XX/g' | sed -e 's/3/X/g' >>
size
0.txt
dk@mace /repository> echo -n $(( `cat size1.txt | wc -c` & 3 )) | sed
-e 's/0//g' | sed -e 's/1/XXX/g' | sed -e 's/2/XX/g' | sed -e 's/3/X/g' >>
size
1.txt
dk@mace /repository> echo -n $(( `cat size2.txt | wc -c` & 3 )) | sed
-e 's/0//g' | sed -e 's/1/XXX/g' | sed -e 's/2/XX/g' | sed -e 's/3/X/g' >>
size
2.txt
dk@mace /repository> echo -n $(( `cat size3.txt | wc -c` & 3 )) | sed
-e 's/0//g' | sed -e 's/1/XXX/g' | sed -e 's/2/XX/g' | sed -e 's/3/X/g' >>
size
3.txt
dk@mace /repository> echo -n $(( `cat size4.txt | wc -c` & 3 )) | sed
-e 's/0//g' | sed -e 's/1/XXX/g' | sed -e 's/2/XX/g' | sed -e 's/3/X/g' >>
size
4.txt
dk@mace /repository> echo -n $(( `cat size5.txt | wc -c` & 3 )) | sed
-e 's/0//g' | sed -e 's/1/XXX/g' | sed -e 's/2/XX/g' | sed -e 's/3/X/g' >>
size
5.txt
dk@mace /repository> # and verify that's fixed our file sizes for us!
dk@mace /repository> ls -la size?.txt
-rw-r--r--    1 dk       Domain U      124 May 18 15:59 size0.txt
-rw-r--r--    1 dk       Domain U      128 May 18 16:08 size1.txt
-rw-r--r--    1 dk       Domain U      128 May 18 16:08 size2.txt
-rw-r--r--    1 dk       Domain U      128 May 18 16:08 size3.txt
-rw-r--r--    1 dk       Domain U      128 May 18 16:06 size4.txt
-rw-r--r--    1 dk       Domain U      132 May 18 16:09 size5.txt




    cheers, 
      DaveK
-- 
Can't think of a witty .sigline today....



More information about the Binutils mailing list