Hi Sarita,
go/packages usually has no trouble loading packages that import "C": underneath, it calls "go list -json" which generates Go code, and that's what we load and parse. Of course, that means you see the same (generated) Go code as the compiler, which is not what the user actually typed in their editor or committed to version control.
If you're using the CHA package, you'll need LoadAllSyntax, since the analysis requires source code for entire program. But you shouldn't need the "| 4096" to set hidden bits. (I wasn't even aware of that particular one, and I used this package regularly to load programs that import "C".)
I suggest you follow the example of one of the existing tools in the x/tools repo, such as cmd/callgraph:
or internal/cmd/deadcode:
alan