Skip to content

shred/patchwork

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PatchWork

PatchWork is a debugging tool similar to MuForce and Mungwall. It asserts that calls to AmigaOS libraries are AutoDocs conformous. Illegal parameters (e.g. NULL where a pointer is expected) are reported. PatchWork helps you to make your code more robust and future proof. 😉

The source code was closed, like almost all of my Amiga projects. I have reviewed and reformatted the files, translated the comments from German to English, and made the project compilable on Linux (and probably other targets) using vbcc. The source is now open to everyone for contributing, studying, archiving, or just enjoying the good old Amiga times.

Features

  • Validates commodities, dos, exec, gadtools, graphics, intuition and utility library calls, up to AmigaOS 3.2.
  • Reports to the debugging console (e.g. Sushi).
  • Shows a code extract of the violating code if DisLib by Thomas Richter is installed.
  • 100% hand-made assembler code, so PatchWork only has a neglectable performance impact on your system, and can just be kept running.
  • Works on any 68000 based CPU, no MMU required.
  • GPL licensed, open source.
  • Source Code is available at GitHub.

Example Output

This is how a full PatchWork hit with all options enabled looks like:

exec.library OldOpenLibrary("dos.library")
Severity 1: obsoleted, use OpenLibrary() instead
PC=07E9BCFC TCB=07BF34A0 ("Shell Process")
Data: FFFFFFFF 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Addr: 07EA2A3A 07E9FF46 00000000 00000000 00000000 00000000 078007F8 07BF4510
----> 07EA2A3A - "pwtest"	Hunk 0001, Offset 00008A4A
----> 07E9FF46 - "pwtest"	Hunk 0001, Offset 00005F56
PC-8: 51CEFF22 4E7570FF 23C007EA 251E41FA 6D4E23C8 07EA2522 43FA4250 2C780004
PC *: 4EAEFE68 23C007EA 253A6100 7F886100 089A23C0 07EA266A 6700024C 203C0000
07e9bcdc :  51ce ff22                  dbra d6,$7e9bc00
07e9bce0 :  4e75                       rts
07e9bce2 :  70ff                       moveq.l #-$1,d0
07e9bce4 :  23c0 07ea 251e             move.l d0,$7ea251e
07e9bcea :  41fa 6d4e                  lea.l $7ea2a3a(pc),a0
07e9bcee :  23c8 07ea 2522             move.l a0,$7ea2522
07e9bcf4 :  43fa 4250                  lea.l $7e9ff46(pc),a1
07e9bcf8 :  2c78 0004                  movea.l $4.w,a6
07e9bcfc : *4eae fe68                  jsr -$198(a6)
07e9bd00 :  23c0 07ea 253a             move.l d0,$7ea253a
07e9bd06 :  6100 7f88                  bsr $7ea3c90
07e9bd0a :  6100 089a                  bsr $7e9c5a6
07e9bd0e :  23c0 07ea 266a             move.l d0,$7ea266a
07e9bd14 :  6700 024c                  beq $7e9bf62
07e9bd18 :  203c 0000 2800             move.l #$2800,d0
Stck: 07E9BD00 07BA246C 00000001 00F95C92 00000FA0 4D656761 20536F75 6E644372
Stck: 61636B65 72000000 07BF5E28 00000B48 02090909 05050500 00001111 114E4E4E
----> 07E9BCFC - "pwtest"	Hunk 0001, Offset 00001D0C
----> 07E9BD00 - "pwtest"	Hunk 0001, Offset 00001D10
----> 07BA246C - "pwtest"	Hunk 0000, Offset 0000000C
----> 00F95C92 - "ROM - dos 40.3 (1.4.93)"	Hunk 0000, Offset 000005AE

Building from Source

This project is mainly made to be build on Linux machines. However, with a few modifications it can also be built on AmigaOS and other operating systems.

Requirements:

Set the AMIGA_NDK env variable to the location of the unpacked NDK3.2 directory on your build machine. Also set AMIGA_INCLUDES to the location of 3rd party include files, where the disassembler.library includes can be found.

Then just invoke make to build the project. The compiled project can be found in the build directory.

make release will compile a release version in the release directory.

Today's standard encoding is UTF-8. Unfortunately AmigaOS does not support this encoding, so the files in this project have different encodings depending on their purpose. The assembler files must use plain ASCII encoding, so they can be edited on Linux and Amiga without encoding problems. For special characters in strings, always use escape sequences. Do not use special characters in comments. make check will test if these files contain illegal characters. All purely Amiga-related files (like AmigaGuide files) are expected to be ISO-8859-1 encoded. Then again, README.md (and other files related to the open source release) are UTF-8 encoded. If you are in doubt, use plain ASCII.

Contribution and Releases

The source code of this project can be found at the official GitHub page.

If you found a bug or have a feature request, feel free to open an issue or send a pull request.

Official binaries are available on the AmiNet.

Please keep the "PatchWork" package name reserved for official releases. If you want to release a fork, use a different package name. But please consider contributing to the reference repository instead. This is better than having an unknown number of different versions circulating around.

License

PatchWork is distributed under GPLv3 (Gnu Public License).